自定义模块
自定义模块就是自己创建一个.py 文件,写入相应的函数和变量,形成一个独立的模块。
import 语句
想使用 Python 源文件,只需在另一个源文件里执行 import 语句:
import module1[, module2[,... moduleN]
下面演示了一个 main.py 文件如何调用 greeting.py 模块。
python
# 文件: greeting.py
def sayHi( name ):
print ("Hi", name)
python
# 文件: main.py
import greeting
greeting.sayHi('Oldmoon') #输出Hi Oldmoon
路径问题
使用import greeting
时,要保证 main.py 和 greeting.py 在同一个文件夹路径下,或者将 greeting.py 文件放置到 Python 的搜索路径中。
Python 的搜索路径可以使用以下代码查看:
python
import sys
print(sys.path)
from … import 语句
Python 的 from … import 语句可以从模块中导入一个指定的部分到文件:
from modname import name1[, name2[, ... nameN]]
python
# 文件: greeting.py
def sayBye( name ):
print ("Bye", name)
def sayHi( name ):
print ("Hi", name)
def sayNo( name ):
print ("No", name)
python
# 文件: main.py
from greeting import sayHi, sayBye
greeting.sayHi('Oldmoon') #输出Hi Oldmoon
greeting.sayBye('Oldmoon') #输出Bye Oldmoon
greeting.sayNo('Oldmoon') #报错,因为没有引入sayNo
from … import * 语句
还可以使用from … import *
语句把一个模块的所有内容全都导入到当前文件:
from modname import *
python
# 文件: greeting.py
def sayBye( name ):
print ("Bye", name)
def sayHi( name ):
print ("Hi", name)
def sayNo( name ):
print ("No", name)
python
# 文件: main.py
from greeting import *
sayHi('Oldmoon') #输出Hi Oldmoon
sayBye('Oldmoon') #输出Bye Oldmoon
sayNo('Oldmoon') #输出No Oldmoon
全局变量与函数
使用from greeting import *
时,sayHi 等函数会变成 main.py 中的全局函数,不需要再使用greeting.sayHi
。这样看起来是方便了很多,但是要谨慎使用!因为不同的模块可能会有函数名或变量名的冲突。例如:
python
# 文件: greeting.py
def sayBye( name ):
print ("Bye", name)
def sayHi( name ):
print ("Hi", name)
def sayNo( name ):
print ("No", name)
python
# 文件: hi.py
def sayHi( name ):
print ("Hi New", name)
python
# 文件: main.py
from greeting import *
from hi import *
sayHi('Oldmoon') #输出Hi New Oldmoon,greeting中的sayHi会被hi中的sayHi覆盖。
sayBye('Oldmoon') #输出Bye Oldmoon
sayNo('Oldmoon') #输出No Oldmoon